const minioClient = require('../config/minio');
require('dotenv').config();


// 上传图片到 Minio
exports.uploadImage = async (req, res) => {
  try {
    // 检查是否有文件上传
    if (!req.file) {
      return res.status(400).json({ error: '未上传任何文件' });
    }
    const file = req.file;
    const bucketName = process.env.MINIO_BUCKET_NAME || 'test01';
    // 检查 bucket 是否存在，如果不存在则创建
    await checkOrCreateBucket(bucketName);
    // 设置文件存储路径和名称
    const objectName = `${Date.now()}-${file.originalname}`;
    // 上传文件到 Minio
    await minioClient.putObject(
      bucketName,
      objectName,
      file.buffer,
      file.size,
      {
        'Content-Type': file.mimetype,
      }
    );
     // 手动构造图片URL
     const protocol = process.env.MINIO_USE_SSL === 'true' ? 'https' : 'http';
     const port = process.env.MINIO_PORT ? `:${process.env.MINIO_PORT}` : '';
     const imageUrl = `${protocol}://${process.env.MINIO_END_POINT}${port}/${bucketName}/${objectName}`;
    res.json({
      code: 200,
      message: '图片上传成功',
      data: {
        url: imageUrl,
      },
    });
  } catch (error) {
    console.error('图片上传失败:', error);
    res.status(500).json({ error: '图片上传失败' });
  }
};
// 检查 bucket 是否存在，如果不存在则创建
async function checkOrCreateBucket(bucketName) {
  try {
    const isExist = await minioClient.bucketExists(bucketName);
    if (!isExist) {
      await minioClient.makeBucket(bucketName, process.env.MINIO_REGION);
    }
  } catch (error) {
    console.error('检查或创建 bucket 失败:', error);
    throw error;
  }
}